#include <iostream>

using namespace std;
/*
	1、向上转型：通过子类访问父类成员 -- upcasting
*/

class Instrument {
public:
	void play( ) const {
		cout << "Instrument::play" << endl;
	}
};

class Wind : public Instrument { 
public:
	// Redefine interface function:
	void play( ) const {
		cout << "Wind::play" << endl; 
	}
};

void tune( Instrument& i ) { 
	i.play( ); 
}

int main( ) {
	Wind flute;
	tune(flute); // Upcasting -- 没有virtual，可以通过子类调用父类方法
	
	/*
		向上转型 -- 只能通过指针 和 引用实现
	*/
	Instrument* p = &flute; // Upcasting
	p->play();
	
	Instrument& r = flute; // Upcasting
	r.play();
	//没有virtual 只会调用父类方法
}